import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
import sun.nio.ch.ThreadPool;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;

public class Main {

    public static void main(String[] args) throws InterruptedException {
//        new StudentHelper().saveTheBestStudent("123").start(new Callback<Boolean>() {
//            @Override
//            public void onResult(Boolean uri) {
//                System.out.println(uri);
//            }
//
//            @Override
//            public void onError(Exception e) {
//                System.out.println(e);
//            }
//        });

//        new ArrayList<Integer>().addAll(null);
        Observable.just(1,2,3)
                .subscribeOn(Schedulers.newThread())
                .subscribe(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("onNext:"+integer);
                    }
                });


//        AsyncJob.create(new Action0<Integer>() {
//            @Override
//            Integer call() {
//                System.out.println(Thread.currentThread().getName());
//                return 1;
//            }
//        })
//                .createOnNewThread()
//                .callbackOnNewThread()
//                .map(new Func<Integer, String>() {
//                    @Override
//                    public String call(Integer integer) {
//                        System.out.println("map"+Thread.currentThread().getName());
//                        return String.valueOf(integer);
//                    }
//                })
//                .callbackOnNewThread()
//                .start(new Callback<String>() {
//                    @Override
//                    public void onNext(String str) {
//                        System.out.println(Thread.currentThread().getName()+":"+str);
//                    }
//
//                    @Override
//                    public void onComplete() {
//                        System.out.println(Thread.currentThread().getName()+":finish");
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        System.out.println(e.getMessage());
//                    }
//                });

//        List<Integer> list = new ArrayList<Integer>();
//        list.add(1);
//        list.add(2);
//        list.add(3);
//        list.add(4);
//        list.add(5);
//        list.add(6);
//        list.add(7);
//        list.add(8);
//        AsyncJob.just(list)
//                .map(new Func<Integer, String>() {
//
//                    @Override
//                    public String call(Integer integer) {
//                        return String.valueOf(integer);
//                    }
//                })
//                .callbackOnNewThread()
//                .start(new Callback<String>() {
//                    @Override
//                    public void onNext(String integer) {
//                        System.out.println(Thread.currentThread().getName()+":"+integer);
//                    }
//
//                    @Override
//                    public void onComplete() {
//                        System.out.println(Thread.currentThread().getName()+":finish");
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//
//                    }
//                });


    }
}
